; Disassembly of the file "z:\ramdisk\home\knoppix\none\System tracks analysis\Sector_1_Track_00_Side_0.hexdump.bin" ; ; CPU Type: Z80 ; ; Using the opcode map file "z:\ramdisk\home\knoppix\none\System tracks analysis\Sector_1_Track_00_Side_0.hexdump.opmap" ; ; Created with dZ80 2.0 ; ; on Saturday, 15 of June 2013 at 11:09 AM ; 0000 CD8B00 CALL $008B 0003 80 ADD A,B 0004 00 NOP 0005 CD06D1 CALL $D106 0008 43 DB $43 0009 4F DB $4F 000A 42 DB $42 000B 52 DB $52 000C 41 DB $41 000D 20 DB $20 000E 35 DB $35 000F 33 DB $33 0010 4B DB $4B 0011 20 DB $20 0012 43 DB $43 0013 50 DB $50 0014 2F DB $2F 0015 4D DB $4D 0016 20 DB $20 0017 32 DB $32 0018 2E DB $2E 0019 32 DB $32 001A 20 DB $20 001B 20 DB $20 001C 31 DB $31 001D 39 DB $39 001E 39 DB $39 001F 33 DB $33 0020 20 DB $20 0021 20 DB $20 0022 20 DB $20 0023 20 DB $20 0024 20 DB $20 0025 20 DB $20 0026 20 DB $20 0027 20 DB $20 0028 20 DB $20 0029 20 DB $20 002A 20 DB $20 002B 20 DB $20 002C 20 DB $20 002D 20 DB $20 002E 20 DB $20 002F 20 DB $20 0030 00 DB $00 0031 00 DB $00 0032 00 DB $00 0033 00 DB $00 0034 00 DB $00 0035 00 DB $00 0036 00 DB $00 0037 00 DB $00 0038 00 DB $00 0039 00 DB $00 003A 00 DB $00 003B 00 DB $00 003C 00 DB $00 003D 00 DB $00 003E 00 DB $00 003F 00 DB $00 0040 00 DB $00 0041 00 DB $00 0042 00 DB $00 0043 00 DB $00 0044 00 DB $00 0045 00 DB $00 0046 00 DB $00 0047 00 DB $00 0048 00 DB $00 0049 00 DB $00 004A 00 DB $00 004B 00 DB $00 004C 00 DB $00 004D 00 DB $00 004E 00 DB $00 004F 00 DB $00 0050 00 DB $00 0051 00 DB $00 0052 00 DB $00 0053 00 DB $00 0054 00 DB $00 0055 00 DB $00 0056 00 DB $00 0057 00 DB $00 0058 00 DB $00 0059 00 DB $00 005A 00 DB $00 005B 00 DB $00 005C 00 DB $00 005D 00 DB $00 005E 00 DB $00 005F 00 DB $00 0060 00 DB $00 0061 00 DB $00 0062 00 DB $00 0063 00 DB $00 0064 00 DB $00 0065 00 DB $00 0066 00 DB $00 0067 00 DB $00 0068 00 DB $00 0069 00 DB $00 006A 00 DB $00 006B 00 DB $00 006C 00 DB $00 006D 00 DB $00 006E 00 DB $00 006F 00 DB $00 0070 00 DB $00 0071 00 DB $00 0072 00 DB $00 0073 00 DB $00 0074 00 DB $00 0075 00 DB $00 0076 00 DB $00 0077 00 DB $00 0078 00 DB $00 0079 00 DB $00 007A 00 DB $00 007B 00 DB $00 007C 00 DB $00 007D 00 DB $00 007E 00 DB $00 007F 00 DB $00 0080 00 DB $00 0081 00 DB $00 0082 00 DB $00 0083 00 DB $00 0084 00 DB $00 0085 00 DB $00 0086 00 DB $00 0087 00 DB $00 0088 00 DB $00 0089 20 DB $20 008A 00 DB $00 008B F3 DI 008C 3E40 LD A,$40 008E D3FE OUT ($FE),A ; set O6 to 1 (VRAM CPU access) 0090 210040 LD HL,$4000 0093 110140 LD DE,$4001 0096 01FFBF LD BC,$BFFF 0099 3600 LD (HL),$00 009B EDB0 LDIR ; erase 4000-FFFF (fill with zeros, black the CP/M screen) 009D 210002 LD HL,$0200 00A0 1100C9 LD DE,$C900 ; 00A3 010035 LD BC,$3500 ; copy 3500h bytes (sec2/cyl00/side0-[1/2sec1]/cyl01/side1) 00A6 EDB0 LDIR ; from 0200 to C900 (26 1/2 sectors, CCP+BDOS+BIOS) 00A8 3100A0 LD SP,$A000 ; stack at A000 00AB 210002 LD HL,$0200 00AE 110860 LD DE,$6008 00B1 0680 LD B,$80 ; 80h loops next 00B3 C5 PUSH BC ; <--- <--- <--- <--- <--- <--- <---| 00B4 011000 LD BC,$0010 ; | this copies 16 bytes 00B7 EDB0 LDIR ; copy 16 bytes from 0200 to 6008 | at once from: 00B9 EB EX DE,HL ; \ | 0200 to 6008 this is a backup 00BA 011000 LD BC,$0010 ; \ DE is | 0210 to 6028 of CCP 00BD 09 ADD HL,BC ; / incremented | 0220 to 6048 stored interleaved 00BE EB EX DE,HL ; / by 10h | ... in second VRAM page 00BF C1 POP BC ; | ... 00C0 10F1 DJNZ $00B3 ; ---> ---> ---> ---> ---> ---> --->| 09F0 to 6FE8 00C2 210037 LD HL,$3700 ; copy 476h bytes from 3700 00C5 11005B LD DE,$5B00 ; (100h in sector 1 cyl 1 side 1) 00C8 017604 LD BC,$0476 ; to 5B00 (BLOCK#1) 00CB EDB0 LDIR ; this is free space above VRAM page 1 (5B00-5FFF) 00CD 21763B LD HL,$3B76 ; copy 4FFh bytes from 3B76 00D0 11007B LD DE,$7B00 ; (176h in sector 3 cyl 1 side 1) 00D3 01FF04 LD BC,$04FF ; to 7B00 (BLOCK#2) 00D6 EDB0 LDIR ; this is free space above VRAM page 2 (7B00-7FFF) 00D8 2103DF LD HL,$DF03 ; BIOS WBOOT 00DB 220100 LD ($0001),HL ; store in (0001-0002) 00DE CD90E6 CALL $E690 ; (E690-C900=1D90, 1C00/200=E so this is 190h in sect 7 cyl 0 side 1) 00E1 2100FC LD HL,$FC00 ; FC00 is 100h in sec9/cyl01/side0 (0100: 00 01 02 03 02 02 02 02 FF FF FF FF) 00E4 54 LD D,H 00E5 5D LD E,L 00E6 0604 LD B,$04 ; max. 4 loops next 00E8 7E LD A,(HL) ; <--- <---| get first drive number 00E9 32F8FD LD ($FDF8),A ; | copy to FDF8 (first arg for 8272 command in routine $5CBE) 00EC D9 EXX ; | 00ED CDBE5C CALL $5CBE ; | send a Sense Drive Status command and read results 00F0 D9 EXX ; | 00F1 2005 JR NZ,$00F8 ; --->| | if READY skip fwd 00F3 23 INC HL ; | | pointer to next drive no. 00F4 10F2 DJNZ $00E8 ; -------->| 00F6 18E9 JR $00E1 ; | 00F8 7E LD A,(HL) ; <---| HL=FC0x points to drive number found READY 00F9 3600 LD (HL),$00 ; (FC0x)=00 00FB 12 LD (DE),A ; (FC00)=drive number found READY 00FC 210400 LD HL,$0004 00FF 19 ADD HL,DE ; HL=0004+FC00=FC04 0100 77 LD (HL),A ; (FC04)=drive number found READY 0101 23 INC HL 0102 77 LD (HL),A ; (FC05)=drive number found READY 0103 5D LD E,L ; E=05 0104 23 INC HL 0105 77 LD (HL),A ; (FC06)=drive number found READY 0106 23 INC HL 0107 56 LD D,(HL) ; D=(FC07)=02 0108 77 LD (HL),A ; (FC07)=drive number found READY 0109 2198FD LD HL,$FD98 ; CTC interrupt table start address 010C ED5E IM 2 010E 7C LD A,H ; upper half of CTC interrupt table start address (FD)... 010F ED47 LD I,A ; ...is stored in register I (see Z80 docs) 0111 7D LD A,L ; lower half of CTC interrupt table start address (98)... 0112 D3E3 OUT ($E3),A ; ...is sent to CTC channel 0 ; MEANING: Interrupt Vector being used by all 4 channels!! ; Interrupt Vector = 10011cc0 where cc is the CTC channel. ; requesting the interrupt. So interrupt vector for ; CTC0 = FD98, CTC1 = FD9A, CTC2 = FD9C, CTC3 = FD9E 0114 3E7F LD A,$7F ; data for CTC0 on next line: set CTC0 to counter mode ; and disable CTC0 interrupts, time const. follows 0116 D3E3 OUT ($E3),A 0118 3E01 LD A,$01 ; CTC0 time constant (one int. per one byte read)... 011A D3E3 OUT ($E3),A ; ...sent to CTC0 011C 3E7B LD A,$7B ; data for CTC1+2 (disable int. no time const. follows)... 011E D3EB OUT ($EB),A ; ...sent to CTC1... 0120 D3F3 OUT ($F3),A ; ...and CTC2 0122 3E7F LD A,$7F ; data for CTC3 (disable int. time const. follows)... 0124 D3FB OUT ($FB),A ; ...is sent to CTC3 0126 3E01 LD A,$01 ; time constant for CTC3... 0128 D3FB OUT ($FB),A ; ...is sent to CTC3 012A 3AF8FD LD A,($FDF8) ; first arg of 8272 command (head#, drive#)... 012D E603 AND $03 ; ...is filtered for drive# only... 012F F630 OR $30 ; ...and bits 4, 5 set (30h = ASCII code for "0") 0131 322D7F LD ($7F2D),A ; (7F2D) holds the "2" in "Insert disk E in drive 2:" (1A3 in sec5/cyl01/side1) 0134 CB4F BIT 1,A ; test if drive 2 or 3 0136 3E00 LD A,$00 0138 21EADF LD HL,$DFEA ; ** $DFEA = start addr of DPB #0-#1 013B 2805 JR Z,$0142 ; ---> --->| 013D F640 OR $40 ; | set bit 6 if drive 2,3 013F 21CADF LD HL,$DFCA ; | ** $DFCA = start addr of DPB #2-#7 0142 2259DF LD ($DF59),HL ; <--- <-| HL=DFEA if drive 0,1, HL=DFCA if drive 2,3 0145 224AFB LD ($FB4A),HL 0148 2B DEC HL ; * DE=DFF9 if drive 0,1 or 0149 56 LD D,(HL) ; * DE=DFD9 if drive 2,3 014A 2B DEC HL ; * (DFF9 is base addr of XLT #0-#1, 26 sec/trk, skew=6) 014B 5E LD E,(HL) ; * (DFD9 is base addr of XLT #2-#4, 9 sec/trk, skew=2) 014C ED5340FB LD ($FB40),DE ; (FB40-FB41) have XLT #4 base 0150 216101 LD HL,$0161 ; 0161=addr of "COBRA 53K CP/M 2.2 1993" message (sec0/cyl00/side0) 0153 CD3D5F CALL $5F3D ; print message 0156 3E40 LD A,$40 0158 D3FE OUT ($FE),A ; set O6=1 (VRAM CPU access) - because O6 reset by print message above 015A AF XOR A 015B 3240DF LD ($DF40),A 015E CD625F CALL $5F62 ; erase 0008-3FF8 and jump to WBOOT 0161 43 DB $43 0162 4F DB $4F 0163 42 DB $42 0164 52 DB $52 0165 41 DB $41 0166 20 DB $20 0167 35 DB $35 0168 33 DB $33 0169 4B DB $4B 016A 20 DB $20 016B 43 DB $43 016C 50 DB $50 016D 2F DB $2F 016E 4D DB $4D 016F 20 DB $20 0170 32 DB $32 0171 2E DB $2E 0172 32 DB $32 0173 20 DB $20 0174 20 DB $20 0175 31 DB $31 0176 39 DB $39 0177 39 DB $39 0178 33 DB $33 0179 20 DB $20 017A 20 DB $20 017B 20 DB $20 017C 20 DB $20 017D 20 DB $20 017E 20 DB $20 017F 20 DB $20 0180 20 DB $20 0181 20 DB $20 0182 20 DB $20 0183 00 DB $00 0184 46 DB $46 0185 77 DB $77 0186 23 DB $23 0187 56 DB $56 0188 77 DB $77 0189 21 DB $21 018A 98 DB $98 018B C3 DB $C3 018C 72 DB $72 018D 65 DB $65 018E 63 DB $63 018F 61 DB $61 0190 6C DB $6C 0191 69 DB $69 0192 62 DB $62 0193 72 DB $72 0194 61 DB $61 0195 74 DB $74 0196 65 DB $65 0197 09 DB $09 0198 00 DB $00 0199 72 DB $72 019A 65 DB $65 019B 61 DB $61 019C 64 DB $64 019D 20 DB $20 019E 69 DB $69 019F 64 DB $64 01A0 09 DB $09 01A1 00 DB $00 01A2 77 DB $77 01A3 72 DB $72 01A4 69 DB $69 01A5 74 DB $74 01A6 65 DB $65 01A7 09 DB $09 01A8 00 DB $00 01A9 72 DB $72 01AA 65 DB $65 01AB 61 DB $61 01AC 64 DB $64 01AD 09 DB $09 01AE 00 DB $00 01AF 66 DB $66 01B0 64 DB $64 01B1 63 DB $63 01B2 00 DB $00 01B3 66 DB $66 01B4 64 DB $64 01B5 64 DB $64 01B6 00 DB $00 01B7 64 DB $64 01B8 72 DB $72 01B9 69 DB $69 01BA 76 DB $76 01BB 65 DB $65 01BC 20 DB $20 01BD 6E DB $6E 01BE 6F DB $6F 01BF 74 DB $74 01C0 20 DB $20 01C1 72 DB $72 01C2 65 DB $65 01C3 61 DB $61 01C4 64 DB $64 01C5 79 DB $79 01C6 00 DB $00 01C7 64 DB $64 01C8 65 DB $65 01C9 6E DB $6E 01CA 73 DB $73 01CB 69 DB $69 01CC 74 DB $74 01CD 79 DB $79 01CE 00 DB $00 01CF 61 DB $61 01D0 62 DB $62 01D1 6E DB $6E 01D2 6F DB $6F 01D3 72 DB $72 01D4 6D DB $6D 01D5 61 DB $61 01D6 6C DB $6C 01D7 00 DB $00 01D8 6F DB $6F 01D9 76 DB $76 01DA 65 DB $65 01DB 72 DB $72 01DC 72 DB $72 01DD 75 DB $75 01DE 6E DB $6E 01DF 00 DB $00 01E0 70 DB $70 01E1 72 DB $72 01E2 6F DB $6F 01E3 74 DB $74 01E4 65 DB $65 01E5 63 DB $63 01E6 74 DB $74 01E7 00 DB $00 01E8 65 DB $65 01E9 6E DB $6E 01EA 64 DB $64 01EB 20 DB $20 01EC 6F DB $6F 01ED 66 DB $66 01EE 20 DB $20 01EF 74 DB $74 01F0 72 DB $72 01F1 61 DB $61 01F2 63 DB $63 01F3 6B DB $6B 01F4 00 DB $00 01F5 61 DB $61 01F6 64 DB $64 01F7 64 DB $64 01F8 72 DB $72 01F9 65 DB $65 01FA 73 DB $73 01FB 73 DB $73 01FC 20 DB $20 01FD 6D DB $6D 01FE 61 DB $61 01FF 72 DB $72